#!/usr/bin/python
# -*- coding: utf8 -*-

import nltk
import re
import pprint

class Semantico:
    arvore = ()
    jogoDeFutebol = {'equipe1':'',
                     'equipe2':'',
                     'gols1':0,
                     'gols2':0,
                     'estadio':'',
                     'data':''}
    timesCandidatos = {}
    relacao = {'equipe1':'',
               'relacao':'',
               'equipe2':''}
    
    golsPreenchido = False
    resultadoPreenchido = False
    relacao_preenchido = False

    def Processamento(self, arbre):
        arvore = nltk.tree.Tree.parse(arbre)
        self.PrecorrePreOrdem(arvore)
            
    def PrecorrePreOrdem(self, raiz):
        if not isinstance(raiz, str):
            if raiz.node == 'RESULTADO':
                self.ProcessaResultado(raiz)
            elif raiz.node == 'RESULTADO_EXPLICITO':
                self.ProcessaResultado_Completo(raiz)
            elif raiz.node == 'FUTEBOL':
                self.ProcessaFutebol(raiz)
            else:
                for no in raiz:
                    self.PrecorrePreOrdem(no)
        else:
            #print "Token: " + raiz
            self.ProcessaTexto(raiz)
        
       
    def ProcessaResultado(self, noResultado):
        if self.resultadoPreenchido == False:
            self.jogoDeFutebol['gols1'] = noResultado[0].split('/')[0]
            self.jogoDeFutebol['gols2'] = noResultado[2].split('/')[0]
            self.resultadoPreenchido = True
            
    def ProcessaResultado_Completo(self, noResultado):
        self.jogoDeFutebol['gols1'] = noResultado[1][0].split('/')[0]
        self.jogoDeFutebol['equipe1'] = noResultado[0].split('/')[0]
        self.jogoDeFutebol['gols2'] = noResultado[1][2].split('/')[0]
        self.jogoDeFutebol['equipe2'] = noResultado[2].split('/')[0]
        self.resultadoPreenchido = True
        
    def ProcessaTexto(self, token):
        if token.split('/')[1] == 'EQUIPE' or token.split('/')[1] == 'EQUIPE-CIDADE':
            if len(self.jogoDeFutebol['equipe1']) == 0:
                self.jogoDeFutebol['equipe1'] = token.split('/')[0]
            elif len(self.jogoDeFutebol['equipe2']) == 0 and token.split('/')[0] <> self.jogoDeFutebol['equipe1']:
                self.jogoDeFutebol['equipe2'] = token.split('/')[0]
                
        if token.split('/')[1] == 'EQUIPE' or token.split('/')[1] == 'EQUIPE-CIDADE':
            if self.timesCandidatos.has_key(token.split('/')[0]):
                self.timesCandidatos[token.split('/')[0]] = self.timesCandidatos[token.split('/')[0]] + 1
            else:
                self.timesCandidatos[token.split('/')[0]] = 1
        
        if token.split('/')[1] == 'ESTADIO':
            self.jogoDeFutebol['estadio'] = token.split('/')[0]
            
        if token.split('/')[1] == 'DATA':
            self.jogoDeFutebol['data'] = token.split('/')[0]
                        
    def ProcessaFutebol(self, noFutebol):
        equipe1_buffer = ''
        equipe2_buffer = ''
        relacao_buffer = ''

        if noFutebol[0].node == 'NPREAL':
            noNP = noFutebol[0]
            for token in noNP[0]:
                if token.split('/')[1] == 'EQUIPE' or token.split('/')[1] == 'EQUIPE-CIDADE':
                    equipe1_buffer = token.split('/')[0]
                    break
                elif token.split('/')[1] == 'ESTADIO':
                    self.jogoDeFutebol['estadio'] = token.split('/')[0]
            noVerbo =  noFutebol[1]
            relacao_buffer = noVerbo[0].split('/')[0]
            if len(noVerbo) > 1 and not isinstance(noVerbo[1], str) and noVerbo[1].node == 'NP':
                for token in noVerbo[1]:
                    if isinstance(token, str) and (token.split('/')[1] == 'EQUIPE' or token.split('/')[1] == 'EQUIPE-CIDADE') and len(equipe2_buffer) == 0:
                        equipe2_buffer = token.split('/')[0]
                    if not isinstance(token, str) and token.node == 'RESULTADO':
                        self.ProcessaResultado(token)
        elif noFutebol[0].node == 'VP':
            noVerbo = noFutebol[0]
            if len(noVerbo) > 1 and not isinstance(noVerbo[1], str) and noVerbo[1].node == 'NP':
                for token in noVerbo[1]:
                    if not isinstance(token, str) and token.node == 'RESULTADO':
                        self.ProcessaResultado(token)
                    elif isinstance(token, str) and (token.split('/')[1] == 'EQUIPE' or token.split('/')[1] == 'EQUIPE-CIDADE'):
                        self.AdicionaEquipe(token.split('/')[0])
            for token in noVerbo:
                if not isinstance(token, str) and token.node == 'RESULTADO':
                    self.ProcessaResultado(token)
                elif isinstance(token, str) and (token.split('/')[1] == 'EQUIPE' or token.split('/')[1] == 'EQUIPE-CIDADE'):
                    self.AdicionaEquipe(token.split('/')[0])
                
        if relacao_buffer == 'derruba' or relacao_buffer == 'vence' or relacao_buffer == 'venceu' or relacao_buffer == 'perdeu' or relacao_buffer == 'perde' or relacao_buffer == 'empatam' or relacao_buffer == 'empataram' or relacao_buffer == 'empata' or relacao_buffer == 'goleia':
            if not self.relacao_preenchido:
                self.relacao['equipe1'] = equipe1_buffer
                self.relacao['relacao'] = relacao_buffer
                self.relacao['equipe2'] = equipe2_buffer
                self.relacao_preenchido = True
      
    def AdicionaEquipe(self, equipe):
        if self.timesCandidatos.has_key(equipe):
            self.timesCandidatos[equipe] = self.timesCandidatos[equipe] + 1
        else:
            self.timesCandidatos[equipe] = 1
              
    def ProcessamentoFinal(self):
        equipePrimeira = ''
        referenciasPrimeira = 0
        equipeSegunda = ''
        referenciasSegunda = 0
        for equipe in self.timesCandidatos:
            if self.timesCandidatos[equipe] > referenciasSegunda:
                equipeSegunda = equipe
                referenciasSegunda = self.timesCandidatos[equipe]
                if referenciasSegunda > referenciasPrimeira:
                    temp = equipePrimeira
                    equipePrimeira = equipeSegunda
                    equipeSegunda = temp
                    
                    tempReferencia = referenciasPrimeira
                    referenciasPrimeira = referenciasSegunda
                    referenciasSegunda = tempReferencia
                    
        print 'Primeira:' + equipePrimeira
        print 'Segunda:' + equipeSegunda
        if self.jogoDeFutebol['equipe1'] == equipePrimeira and self.jogoDeFutebol['equipe2'] <> equipeSegunda:
            self.jogoDeFutebol['equipe2'] = equipeSegunda
        elif self.jogoDeFutebol['equipe1'] <> equipePrimeira and self.jogoDeFutebol['equipe2'] == equipeSegunda:
            self.jogoDeFutebol['equipe1'] = equipePrimeira
        elif self.jogoDeFutebol['equipe1'] == equipeSegunda and self.jogoDeFutebol['equipe2'] <> equipePrimeira:
            self.jogoDeFutebol['equipe2'] = equipePrimeira        
        elif self.jogoDeFutebol['equipe1'] <> equipeSegunda and self.jogoDeFutebol['equipe2'] == equipePrimeira:
            self.jogoDeFutebol['equipe1'] = equipeSegunda
        elif self.jogoDeFutebol['equipe1'] <> equipeSegunda and self.jogoDeFutebol['equipe2'] <> equipePrimeira and self.jogoDeFutebol['equipe1'] <> equipePrimeira and self.jogoDeFutebol['equipe2'] <> equipeSegunda:
            self.jogoDeFutebol['equipe1'] = equipePrimeira
            self.jogoDeFutebol['equipe2'] = equipeSegunda
        #if self.jogoDeFutebol['equipe2'] == equipePrimeira:
        #    print 'bla3'
        #    if self.jogoDeFutebol['equipe1'] <> equipeSegunda:
        #        self.jogoDeFutebol['equipe1'] = equipeSegunda
        #elif self.jogoDeFutebol['equipe2'] == equipeSegunda:
        #    print 'bla4'
        #    if self.jogoDeFutebol['equipe1'] <> equipePrimeira:
        #        self.jogoDeFutebol['equipe1'] = equipePrimeira  
        
        
        if len(self.relacao['relacao']) > 0:
            if self.jogoDeFutebol['equipe1'] == self.relacao['equipe1']:
                if self.jogoDeFutebol['equipe2'] <> self.relacao['equipe2'] and len(self.relacao['equipe2']) > 0:                   
                    self.jogoDeFutebol['equipe2'] = self.relacao['equipe2']
            elif self.jogoDeFutebol['equipe2'] == self.relacao['equipe2']:
                if self.jogoDeFutebol['equipe1'] <> self.relacao['equipe1'] and len(self.relacao['equipe1']) > 0:
                    self.jogoDeFutebol['equipe1'] = self.relacao['equipe1']
            elif len(self.relacao['equipe2']) >0 and len(self.relacao['equipe1'])>0:
                self.jogoDeFutebol['equipe1'] = self.relacao['equipe1']
                self.jogoDeFutebol['equipe2'] = self.relacao['equipe2']
                    
            if self.relacao['relacao'] == 'venceu' or self.relacao['relacao'] == 'vence' or self.relacao['relacao'] == 'goleia' or self.relacao['relacao'] == 'derruba':
                if self.relacao['equipe1'] == self.jogoDeFutebol['equipe1']:
                    if int(self.jogoDeFutebol['gols1']) < int(self.jogoDeFutebol['gols2']):
                        temp = self.jogoDeFutebol['gols1']
                        self.jogoDeFutebol['gols1'] = self.jogoDeFutebol['gols2']
                        self.jogoDeFutebol['gols2'] = temp
                    elif self.relacao['equipe1'] == self.jogoDeFutebol['equipe2']:
                        temp = self.jogoDeFutebol['gols1']
                        self.jogoDeFutebol['gols1'] = self.jogoDeFutebol['gols2']
                        self.jogoDeFutebol['gols2'] = temp
            elif self.relacao['relacao'] == 'perdeu' or self.relacao['relacao'] == 'perde':
                if self.relacao['equipe1'] == self.jogoDeFutebol['equipe1']:
                    if int(self.jogoDeFutebol['gols1']) > int(self.jogoDeFutebol['gols2']):
                        temp = self.jogoDeFutebol['gols1']
                        self.jogoDeFutebol['gols1'] = self.jogoDeFutebol['gols2']
                        self.jogoDeFutebol['gols2'] = temp
                    elif self.relacao['equipe1'] == self.jogoDeFutebol['equipe2']:
                        temp = self.jogoDeFutebol['gols1']
                        self.jogoDeFutebol['gols1'] = self.jogoDeFutebol['gols2']
                        self.jogoDeFutebol['gols2'] = temp
            elif self.relacao['relacao'] == 'empatam' or self.relacao['relacao'] == 'empataram' or self.relacao['relacao'] == 'empata':
                if int(self.jogoDeFutebol['gols1']) <> int(self.jogoDeFutebol['gols2']):
                        self.jogoDeFutebol['gols1'] = 0
                        self.jogoDeFutebol['gols2'] = 0
            
        equipes = ["Palmeiras", "Bragantino", "São Caetano", "Santos", "Ponte Preta", "Marília", "Barueri", "São Paulo", "Guaratinguetá", "Ituano", "Guarani", "Portuguesa", "Sertãozinho", "Rio Preto", "Corinthians", "Noroeste", "Rio Claro", "Mirassol", "Juventus"]
        estadios = ["Palestra Itália", "Anísio Haddad","Moisés Lucarelli", "Jayme Cintra", "Bento de Abreu", "Morumbi", "Arena Barueri", "Frederico Dalmazo", "Brinco de Ouro", "Alfredo de Castilho", "Santa Cruz"]
        cidades = ["São Paulo", "Barueri", "Guaratinguetá", "Campinas", "Bauru", "Ribeirão Preto", "Marília", "Santos", "São José do Rio Preto"]
            
        for equipe in equipes:
            if equipe.replace(' ', '') == self.jogoDeFutebol['equipe1']:
                self.jogoDeFutebol['equipe1'] = equipe
            elif equipe.replace(' ', '') == self.jogoDeFutebol['equipe2']:
                self.jogoDeFutebol['equipe2'] = equipe
        
        for estadio in estadios:
            if estadio.replace(' ', '') == self.jogoDeFutebol['estadio']:
                self.jogoDeFutebol['estadio'] = estadio